Optimal Data-Dependent Hashing For Nearest Neighbor Search